From: Colin Walters Date: Wed, 28 Oct 2009 22:05:34 +0000 (-0400) Subject: [lookingGlass] Add primitive extensions list X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~10604 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=2cb4dfb4a4d2b3ab4afcc133883c8d16b20b286f;p=gnome-shell.git [lookingGlass] Add primitive extensions list In the future this should be more like the Firefox Addons UI probably with enable/disable/update checking, but stub it out here for now. https://bugzilla.gnome.org/show_bug.cgi?id=599661 --- diff --git a/data/theme/gnome-shell.css b/data/theme/gnome-shell.css index 62684f574..ce39715e7 100644 --- a/data/theme/gnome-shell.css +++ b/data/theme/gnome-shell.css @@ -402,6 +402,29 @@ StTooltip { spacing: 4px; } +#lookingGlassExtensions { + padding: 4px; +} + +.lg-extension-list { + padding: 4px; + spacing: 6px; +} + +.lg-extension { + border: 1px solid #6f6f6f; + border-radius: 4px; + padding: 4px; +} + +.lg-extension-name { + font-weight: bold; +} + +.lg-extension-actions { + spacing: 6px; +} + /* Calendar popup */ #calendarPopup { diff --git a/js/ui/lookingGlass.js b/js/ui/lookingGlass.js index 469c86dbc..f66321dc5 100644 --- a/js/ui/lookingGlass.js +++ b/js/ui/lookingGlass.js @@ -9,7 +9,11 @@ const Shell = imports.gi.Shell; const Signals = imports.signals; const Lang = imports.lang; const Mainloop = imports.mainloop; +const Gettext = imports.gettext.domain('gnome-shell'); +const _ = Gettext.gettext; +const ExtensionSystem = imports.ui.extensionSystem; +const Link = imports.ui.link; const Tweener = imports.ui.tweener; const Main = imports.ui.main; @@ -340,6 +344,99 @@ ErrorLog.prototype = { } } +function Extensions() { + this._init(); +} + +Extensions.prototype = { + _init: function() { + this.actor = new St.BoxLayout({ vertical: true, + name: 'lookingGlassExtensions' }); + this._noExtensions = new St.Label({ style_class: 'lg-extensions-none', + text: _("No extensions installed") }); + this._extensionsList = new St.BoxLayout({ vertical: true, + style_class: 'lg-extensions-list' }); + this.actor.add(this._extensionsList); + this._loadExtensionList(); + }, + + _loadExtensionList: function() { + let extensions = ExtensionSystem.extensionMeta; + let totalExtensions = 0; + for (let uuid in extensions) { + let extensionDisplay = this._createExtensionDisplay(extensions[uuid]); + this._extensionsList.add(extensionDisplay); + totalExtensions++; + } + if (totalExtensions == 0) { + this._extensionsList.add(this._noExtensions); + } + }, + + _onViewSource: function (actor) { + let meta = actor._extensionMeta; + let file = Gio.file_new_for_path(meta.path); + let uri = file.get_uri(); + Gio.app_info_launch_default_for_uri(uri, global.create_app_launch_context()); + Main.lookingGlass.close(); + }, + + _onWebPage: function (actor) { + let meta = actor._extensionMeta; + Gio.app_info_launch_default_for_uri(meta.url, global.create_app_launch_context()); + Main.lookingGlass.close(); + }, + + _stateToString: function(extensionState) { + switch (extensionState) { + case ExtensionSystem.ExtensionState.ENABLED: + return _("Enabled"); + case ExtensionSystem.ExtensionState.DISABLED: + return _("Disabled"); + case ExtensionSystem.ExtensionState.ERROR: + return _("Error"); + case ExtensionSystem.ExtensionState.OUT_OF_DATE: + return _("Out of date"); + } + return "Unknown"; // Not translated, shouldn't appear + }, + + _createExtensionDisplay: function(meta) { + let box = new St.BoxLayout({ style_class: 'lg-extension', vertical: true }); + let name = new St.Label({ style_class: 'lg-extension-name', + text: meta.name }); + box.add(name, { expand: true }); + let description = new St.Label({ style_class: 'lg-extension-description', + text: meta.description }); + box.add(description, { expand: true }); + + let metaBox = new St.BoxLayout(); + box.add(metaBox); + let stateString = this._stateToString(meta.state); + let state = new St.Label({ style_class: 'lg-extension-state', + text: this._stateToString(meta.state) }); + + let actionsContainer = new St.Bin({ x_align: St.Align.END }); + metaBox.add(actionsContainer); + let actionsBox = new St.BoxLayout({ style_class: 'lg-extension-actions' }); + actionsContainer.set_child(actionsBox); + + let viewsource = new Link.Link({ label: _("View Source") }); + viewsource.actor._extensionMeta = meta; + viewsource.actor.connect('clicked', Lang.bind(this, this._onViewSource)); + actionsBox.add(viewsource.actor); + + if (meta.url) { + let webpage = new Link.Link({ label: _("Web Page") }); + webpage.actor._extensionMeta = meta; + webpage.actor.connect('clicked', Lang.bind(this, this._onWebPage)); + actionsBox.add(webpage.actor); + } + + return box; + } +}; + function LookingGlass() { this._init(); } @@ -441,6 +538,9 @@ LookingGlass.prototype = { this._errorLog = new ErrorLog(); notebook.appendPage('Errors', this._errorLog.actor); + this._extensions = new Extensions(); + notebook.appendPage('Extensions', this._extensions.actor); + this._entry.clutter_text.connect('activate', Lang.bind(this, function (o, e) { let text = o.get_text(); // Ensure we don't get newlines in the command; the history file is diff --git a/src/shell-global.c b/src/shell-global.c index ac68bc5d7..7fd37c998 100644 --- a/src/shell-global.c +++ b/src/shell-global.c @@ -577,10 +577,7 @@ shell_global_add_extension_importer (ShellGlobal *global, if (!JSVAL_IS_OBJECT (target_object)) { - g_set_error(error, - G_IO_ERROR, - G_IO_ERROR_FAILED, - "Invalid object"); + g_error ("shell_global_add_extension_importer: invalid target object"); return FALSE; }